import router from '@/router';
import { asyncRoutes } from '@/router'
import useStore from '@/store';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
NProgress.configure({ showSpinner: false }); // 进度环显示/隐藏

// 白名单路由
const whiteList = ['/login'];

router.beforeEach(async (to,from,next)=>{
  NProgress.start();
  const { user, permission } = useStore();
  if (to.path === '/login') {
    next({ path: '/' });
    NProgress.done();
  } else {
    // console.log(asyncRoutes)
    const accessRoutes: any = await permission.generateRoutes();
    // console.log(accessRoutes)
    accessRoutes.forEach((route: any) => {
      // console.log(route)
      router.addRoute(route);
    });
    next({ ...to, replace: true });
    NProgress.done();
  }
})

// router.beforeEach(async (to, from, next) => {
//   NProgress.start();
//   const { user, permission } = useStore();
//   const hasToken = user.token;
//   if (hasToken) {
//     // 登录成功，跳转到首页
//     if (to.path === '/login') {
//       next({ path: '/' });
//       NProgress.done();
//     } else {
//       const hasGetUserInfo = user.roles.length > 0;
//       if (hasGetUserInfo) {
//         if (to.matched.length === 0) {
//           from.name ? next({ name: from.name as any }) : next('/401');
//         } else {
//           next();
//         }
//       } else {
//         try {
//           await user.getUserInfo();
//           const roles = user.roles;
//           const accessRoutes: any = await permission.generateRoutes(roles);
//           accessRoutes.forEach((route: any) => {
//             router.addRoute(route);
//           });
//           next({ ...to, replace: true });
//         } catch (error) {
//           // 移除 token 并跳转登录页
//           await user.resetToken();
//           next(`/login?redirect=${to.path}`);
//           NProgress.done();
//         }
//       }
//     }
//   } else {
//     // 未登录可以访问白名单页面(登录页面)
//     if (whiteList.indexOf(to.path) !== -1) {
//       next();
//     } else {
//       next(`/login?redirect=${to.path}`);
//       NProgress.done();
//     }
//   }
// });

router.afterEach(() => {
  NProgress.done();
});
